package org.formal.common.base;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

/**
 * 通用接口
 * @author jiangyan
 *
 */
@Service
public interface BaseService<T> {
	/**
	 * 根据key查询对应实体数据
	 * @param key
	 * @return
	 */
	T selectByKey(Object key);
	/**
	 * 获取实体未被删除数据
	 * 默认 isDelete 字段 0
	 */
	List<T> selectAll();
	/**
	 * 根据实体条件查询数据 使用=进行匹配
	 * 默认带上 isDelete 字段0
	 */
	List<T> selectByExample(Map<String,Object> map);
	/**
	 * 根据实体条件查询数据 可以自定义条件进行匹配
	 * @param example
	 * @return
	 */
	List<T> selectByExample(Object example);
	/**
	 * 保存实体数据
	 * @param entity
	 * @return
	 */
	int save(T entity);
	/**
	 * 删除实体数据
	 * @param key
	 * @return
	 */
	int delete(Object key);
	/**
	 * 修改所有数据
	 * @param entity
	 * @return
	 */
	int updateAll(T entity);
	/**
	 * 修改所有不为空的数据
	 * @param entity
	 * @return
	 */
	int updateNotNull(T entity);

	/**
	 * 根据实体条件查询总数
	 * @param entity
	 * @return
	 */
	int selectCount(T entity);
}
